//esta tiene lo generado automaticamnete por grails



package musgo

import org.springframework.dao.DataIntegrityViolationException

class AlbumController extends BaseController{

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
    def beforeInterceptor = [action:this.&auth, except:['show', 'list']]
    
    def index() {
        redirect(action: "list", params: params)
    }

    def list(Integer max) {
        
        params.max = Math.min(max ?: 10, 100)
        def artistaInstance=Artista.get(params.ide)
        
        [albumInstanceList: Album.list(params), albumInstanceTotal: Album.count(),artista:artistaInstance]
    }

    def create() {
       
        if(params.form_id!= null){         //informacon provenga del formulario
            Date fechalan
            println params.YYYY.equals("")         //cuadra la f de lanzamientoecha 
            if(params.YYYY.equals("") || params.MM.equals("") || params.DD.equals("") ){
                fechalan=null
            }else{
             fechalan = new Date((Integer.parseInt(params.YYYY)-1900), Integer.parseInt(params.MM), Integer.parseInt(params.DD))
            }
            def album = new Album(params)    //crea el albun com los parametros que mando el formulario
            album.fechaLanzamiento=fechalan  //lengthponemos la fecha valida
          
            
        Imagen imagen;                         //vamos a tomar la imagen que se cargo validar y guaradar en la base de datos
	 String fallo;
	def f = request.getFile("imagen")
	if (!f.empty) {
		imagen = new Imagen(nombre : f.originalFilename
			, tipoContenido : f.contentType, tamano : f.size
			, archivo : f.bytes).save()
		album.imagenA=imagen	
            }else{
            album.imagenA=Imagen.get(1);   
            }
       
                               //agraga imagen al album
       def ide= Artista.findByNick(session.nick)    //busca el artista de la sesion
       Artista art= Artista.get(ide.id)
       album.artista=art;                           //le mete ela artista del album
     
       if(!album.hasErrors() && album.save()){
            fallo="" 
            redirect(action:"show", id:album.id)  //envia a show con id del albun recien creado	
	}
         fallo = "Lo sentimos no se pudo guardar tu album intenta de Nuevo"  //
            [falla:fallo]
        }
        
    }

    def save() {
        def albumInstance = new Album(params)
        if (!albumInstance.save(flush: true)) {
            render(view: "create", model: [albumInstance: albumInstance])
            return
        }

        flash.message = message(code: 'default.created.message', args: [message(code: 'album.label', default: 'Album'), albumInstance.id])
        redirect(action: "show", id: albumInstance.id)
    }

    def show(Long id) {
        
        Cancion cancionaux;
        ArrayList listaCanciones = new ArrayList(25);
        def albumInstance = Album.get(id)
        
        Artista art= Artista.get(albumInstance.artista.id)//trae al artista 
        (albumInstance.canciones).each{                 //coge el map de id de canciones y trae las canciones a un array list
            
            cancionaux= Cancion.get(it.id)
            listaCanciones.add(cancionaux)
        }                    
        [albumInstance: albumInstance, artista:art, listCanciones:listaCanciones]      // mandamos al vita el albun y el artista
    }

    def edit(Long id) {
        def albumInstance = Album.get(id)
        if (!albumInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'album.label', default: 'Album'), id])
            redirect(action: "list")
            return
        }

        [albumInstance: albumInstance]
    }

    def update(Long id, Long version) {
        
        if(!params.foto.equals("true")){  //cambiar datos del album
            def albumInstance = Album.get(params.ide)
            albumInstance.properties = params
             if(!params.YYYY.equals("") && !params.MM.equals("") && !params.DD.equals("") ){
                def fechaLan = new Date((Integer.parseInt(params.YYYY)-1900), Integer.parseInt(params.MM), Integer.parseInt(params.DD)) 
                albumInstance.fechaLanzamiento=fechaLan
            }
           
        if (!albumInstance.save(flush: true)) {
            render(view: "edit", model: [albumInstance: albumInstance])
            return
        }
        redirect(action: "show", id: albumInstance.id)
        } else{
        //para actulizar al foto del album
        def albumInstance = Album.get(params.ide)
        
        if(albumInstance.imagenA.id != 1){
            def imagenInstance = Imagen.get(albumInstance.imagenA.id)
            imagenInstance.delete()
        }
        Imagen imagen;                         //vamos a tomar la imagen que se cargo validar y guaradar en la base de datos
	 
	def f = request.getFile("imagen")
	if (!f.empty) {
		imagen = new Imagen(nombre : f.originalFilename
			, tipoContenido : f.contentType, tamano : f.size
			, archivo : f.bytes).save()
		albumInstance.imagenA=imagen	
            }else{
            albumInstance.imagenA=Imagen.get(1);   
            }
        albumInstance.save(flush: true)
        redirect(action: "show", id: albumInstance.id)
        }
    }

    def delete(Long id) {
        def albumInstance = Album.get(id)
        if (!albumInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'album.label', default: 'Album'), id])
            redirect(action: "list")
            return
        }

        try {
            albumInstance.delete(flush: true)
            flash.message = message(code: 'default.deleted.message', args: [message(code: 'album.label', default: 'Album'), id])
            redirect(controller:"artista", action: "profile")
        }
        catch (DataIntegrityViolationException e) {
            flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'album.label', default: 'Album'), id])
            redirect(action: "show", id: id)
        }
    }
}
